package com.team9.fitness.service;

import com.team9.fitness.entity.UserProfile;
import com.team9.fitness.entity.User;
import com.team9.fitness.mapper.UserProfileMapper;
import com.team9.fitness.mapper.UserMapper;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import java.util.Optional;

/**
 * 用户个人信息服务
 */
@Service
@Transactional
@Slf4j
public class UserProfileService {

    @Autowired
    private UserProfileMapper userProfileMapper;

    @Autowired
    private UserMapper userMapper;

    /**
     * 保存或更新用户个人信息
     */
    public UserProfile saveOrUpdateUserProfile(UserProfile userProfile) {
        log.info("保存或更新用户个人信息: userId={}, name={}, des={}, location={}",
                userProfile.getUserId(), userProfile.getName(), userProfile.getDes(), userProfile.getLocation());

        userProfile.setCreatedAtIfNull();
        userProfile.setUpdatedAtIfNull();

        UserProfile existingProfile = userProfileMapper.selectByUserId(userProfile.getUserId());

        if (existingProfile != null) {
            // 更新现有记录
            userProfile.setId(existingProfile.getId());
            userProfile.setCreatedAt(existingProfile.getCreatedAt());
            log.info("准备更新个人信息: name={}, des={}, location={}",
                    userProfile.getName(), userProfile.getDes(), userProfile.getLocation());
            userProfileMapper.updateByUserId(userProfile);
            log.info("更新用户个人信息成功: userId={}", userProfile.getUserId());
        } else {
            // 创建新记录
            log.info("准备创建个人信息: name={}, des={}, location={}",
                    userProfile.getName(), userProfile.getDes(), userProfile.getLocation());
            userProfileMapper.insert(userProfile);
            log.info("创建用户个人信息成功: userId={}", userProfile.getUserId());
        }

        // 如果用户名发生变化，同时更新user表的username
        if (existingProfile != null && existingProfile.getName() != null &&
                !existingProfile.getName().equals(userProfile.getName())) {
            log.info("用户名发生变化，从 '{}' 更新为 '{}'，同步更新user表",
                    existingProfile.getName(), userProfile.getName());
            userMapper.updateUsernameByUserId(userProfile.getUserId(), userProfile.getName());
        } else if (existingProfile == null && userProfile.getName() != null) {
            // 新创建的个人信息，确保user表有对应的username
            log.info("新创建个人信息，同步更新user表username为: {}", userProfile.getName());
            userMapper.updateUsernameByUserId(userProfile.getUserId(), userProfile.getName());
        }

        return userProfile;
    }

    /**
     * 根据用户ID获取个人信息
     */
    public UserProfile getUserProfileByUserId(Long userId) {
        log.info("获取用户个人信息: userId={}", userId);
        return userProfileMapper.selectByUserId(userId);
    }

    /**
     * 删除用户个人信息
     */
    public void deleteUserProfileByUserId(Long userId) {
        log.info("删除用户个人信息: userId={}", userId);
        userProfileMapper.deleteByUserId(userId);
    }
}
